// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
//
// #define MAX_SIZE 100
//
// typedef struct {
//     int data[MAX_SIZE];
//     int top;
// } Stack;
//
// void initStack(Stack* s) {
//     s->top = -1;
// }
//
// bool isStackEmpty(Stack* s) {
//     return s->top == -1;
// }
//
// bool isStackFull(Stack* s) {
//     return s->top == MAX_SIZE - 1;
// }
//
// bool push(Stack* s, int value) {
//     if (isStackFull(s)) {
//         printf("Stack is full!\n");
//         return false;
//     }
//     s->data[++s->top] = value;
//     return true;
// }
//
// bool pop(Stack* s, int* value) {
//     if (isStackEmpty(s)) {
//         printf("Stack is empty!\n");
//         return false;
//     }
//     *value = s->data[s->top--];
//     return true;
// }
//
// void printStack(Stack* s) {
//     for (int i = 0; i <= s->top; i++) {
//         printf("%d ", s->data[i]);
//     }
//     printf("\n");
// }
//
// void reverseStack(Stack* s) {
//     if (isStackEmpty(s)) return;
//
//     int temp;
//     pop(s, &temp);
//     reverseStack(s);
//     push(s, temp);
// }
//
// int main() {
//     Stack s;
//     initStack(&s);
//
//     push(&s, 1);
//     push(&s, 2);
//     push(&s, 3);
//     push(&s, 4);
//
//     printf("Original stack: ");
//     printStack(&s);
//
//     reverseStack(&s);
//
//     printf("Reversed stack: ");
//     printStack(&s);
//
//     return 0;
// }